import 'dart:io';

[span_0](start_span)// 1. استخدام ثوابت (const) لدرجات الحرارة القصوى والدنيا[span_0](end_span)
const int MIN_TEMP = 15;
const int MAX_TEMP = 30;

[span_1](start_span)// متغيرات حالة الأجهزة العالمية، مع قيمها الافتراضية[span_1](end_span)
bool lightsOn = false;
int thermostatTemp = 20; [span_2](start_span)// الافتراضي 20°C[span_2](end_span)
bool securityArmed = false; [span_3](start_span)// الافتراضي Disarmed[span_3](end_span)

void main() {
  [span_4](start_span)print("Welcome to the Smart Home System!");[span_4](end_span)

  [span_5](start_span)// 3. استخدام حلقة (loop) للسماح بالتفاعل المستمر[span_5](end_span)
  bool isRunning = true;
  while (isRunning) {
    displayMenu();
    String? choice = stdin.readLineSync();

    if (choice == null) {
      continue;
    }

    [span_6](start_span)// 5. استخدام عبارات if/else للتحكم في خيارات المستخدم[span_6](end_span)
    switch (choice) {
      case '1':
        toggleLights(); // تبديل الأضواء
        break;
      case '2':
        setThermostatTemp(); // ضبط درجة الحرارة
        break;
      case '3':
        toggleSecurity(); // تفعيل/إلغاء تفعيل نظام الأمان
        break;
      case '4':
        viewSystemStatus(); // عرض حالة النظام
        break;
      case '5':
        isRunning = false;
        [span_7](start_span)print("Exiting the system. Goodbye!");[span_7](end_span)
        break;
      default:
        print("Invalid choice. Please enter a number between 1 and 5.");
    }
    print("---");
  }
}

void displayMenu() {
  print("\nPlease choose an action:");
  print("1. Toggle lights");
  print("2. Set thermostat temperature");
  print("3. Arm/disarm security system");
  [span_8](start_span)print("4. View system status");[span_8](end_span)
  print("5. Exit");
  stdout.write("Enter your choice: ");
}

[span_9](start_span)// 5. استخدام عبارة switch للتعامل مع أوامر الأجهزة[span_9](end_span)
void toggleLights() {
  lightsOn = !lightsOn;
  String status = lightsOn ? "ON" : "OFF";
  [span_10](start_span)print("Lights are now $status.");[span_10](end_span)
}

void toggleSecurity() {
  securityArmed = !securityArmed;

  [span_11](start_span)// 6. استخدام عملية نصية لتحويل الحالة (مثل "armed" إلى "ARMED")[span_11](end_span)
  String status = securityArmed ? "ARMED" : "DISARMED";
  print("Security system is now ${status}.");
}

void setThermostatTemp() {
  [span_12](start_span)stdout.write("Set thermostat temperature ($MIN_TEMP°C - $MAX_TEMP°C): ");[span_12](end_span)
  String? input = stdin.readLineSync();

  try {
    int? newTemp = int.tryParse(input ?? '');
    
    [span_13](start_span)[span_14](start_span)// 4 & 8. التحقق من صحة المدخلات باستخدام العوامل المنطقية والعلائقية (Logical & Relational Operators)[span_13](end_span)[span_14](end_span)
    if (newTemp != null && newTemp >= MIN_TEMP && newTemp <= MAX_TEMP) {
      thermostatTemp = newTemp;
      [span_15](start_span)print("Thermostat set to $thermostatTemp°C.");[span_15](end_span)
    } else {
      [span_16](start_span)print("Invalid temperature. Please enter a value between $MIN_TEMP and $MAX_TEMP.");[span_16](end_span)
    }
  } catch (e) {
    print("Invalid input. Please enter a whole number.");
  }
}

void viewSystemStatus() {
  print("\nSystem Status:");

  [span_17](start_span)// 6. استخدام التضمين النصي (String Interpolation) لعرض القيم[span_17](end_span)

  // حالة الأضواء
  String lightStatus = lightsOn ? "ON" : "OFF";
  print("Lights: $lightStatus");

  [span_18](start_span)// حالة نظام الأمان (استخدام عملية نصية لتحويل إلى أحرف كبيرة)[span_18](end_span)
  String securityStatus = (securityArmed ? "ARMED" : "DISARMED").toUpperCase();
  [span_19](start_span)print("Security System: $securityStatus");[span_19](end_span)

  [span_20](start_span)// حالة منظم الحرارة وتطبيق تمرين FizzBuzz-like[span_20](end_span)
  String tempMessage = "";
  if (thermostatTemp % 15 == 0) { // مضاعف لـ 3 و 5
    [span_21](start_span)tempMessage = "Perfect Day";[span_21](end_span)
  } else if (thermostatTemp % 5 == 0) {
    [span_22](start_span)[span_23](start_span)tempMessage = "Warm Day";[span_22](end_span)[span_23](end_span)
  } else if (thermostatTemp % 3 == 0) {
    [span_24](start_span)tempMessage = "Cool Day";[span_24](end_span)
  }

  print("Thermostat: ${thermostatTemp}°C ${tempMessage}");
}
